 /***************************************************************************************************
  * Copyright (c) 2006 IBM Corporation and others. All rights reserved. This program and the
  * accompanying materials are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors: IBM Corporation - initial API and implementation
  **************************************************************************************************/

 package org.eclipse.ui.internal.navigator;

 import org.eclipse.jface.viewers.ViewerLabel;

 /**
  * Provides a subclass of ViewerLabel that can be re-used for multiple viewer updates.
  *
  * @since 3.2
  *
  */
 public class ReusableViewerLabel extends ViewerLabel {

     private ViewerLabel original = null;
     /**
      * Creates a ViewerLabel with null text and image.
      *
      */
     public ReusableViewerLabel() {
         super(null, null);
     }


     /**
      * Updates the Background, Foreground, and Font to the given ViewerLabel. The
      * Text and Image are reset to <b>null</b>.
      *
      * @param theOriginal The ViewerLabel to represent.
      */
     public void reset(ViewerLabel theOriginal) {
         original = theOriginal;
         setBackground(original.getBackground());
         setFont(original.getFont());
         setForeground(original.getForeground());
         setImage(null);
         setText(null);
     }
     
     /**
      *
      * @param theOriginal The ViewerLabel to fill with my values.
      */
     public void fill(ViewerLabel theOriginal) {

         theOriginal.setBackground(getBackground());
         theOriginal.setFont(getFont());
         theOriginal.setForeground(getForeground());
         theOriginal.setImage(getImage());
         theOriginal.setText(getText() != null ? getText() : ""); //$NON-NLS-1$
 }

     /**
      *
      * @return True if the ReusableViewerLabel has different text or image than the original
      * ViewerLabel.
      */
     public boolean hasChanged() {
         
         boolean changed = false;
         if(original != null) {
             if(original.getText() == null ^ getText() != null)
                 changed |= getText() != null;
             if(original.getText() != null && getImage() != null)
                 changed |= !getImage().equals(original.getImage());
         }
         return changed;
     }

     /**
      * @return True if the text is non-null and non-zero in length.
      */
     public boolean isValid() {
         return getText() != null && getText().length() > 0 && getImage() != null;

     }

 }

